/**
 * request 使用说明
 * url : 请求的接口
 * data: 请求的参数
 * method: 请求的方法，GET, PUT, POST, DELETE 等等，可以传小写的 get, put, post, delete
 * responseType: 设置响应的数据类型。合法值：text、arraybuffer
 **/

import baseURL from "@/config/baseURL.js";
import getStateFn from "@/utils/state.js";

/**
 * 获取请求头信息
 **/
export function getHeaders() {
  return {
    "Content-Type": "application/json",
  };
}

function request({ url, data = {}, method, responseType }) {
  return new Promise((resolve, reject) => {
    uni.request({
      url: baseURL + url,
      data: {
        ...data,
      },
      method: method.toUpperCase(),
      // #ifndef MP-ALIPAY
      responseType: responseType ? responseType : "text",
      // #endif
      header: getHeaders(),
      timeout: 5000,
      success: (res) => {
        // resolve; 控制台正常颜色输出
        // reject; 控制台 红色颜色输出
        if (res.data.code == 200) {
          // 控制台正常颜色输出
          resolve(res.data);
        }
        // 异常处理函数
        const stateOpt = getStateFn(res) ;
        if (stateOpt.state === "waring") {
          // 控制台 红色颜色输出
          reject(res.data);
        }
      },
      fail: (error) => {
        reject(error);
      },
      complete: (error) => {
        // 关闭加载
        uni.hideLoading();
      },
    });
  });
}

export default request;
